package org.example.gc;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

/**
 *  分析dump中的 Roots 根节点
 *  推荐使用开源的 eclipse mat工具 : http://www.eclipse.org/mat
 *  1. 先通过 jvisualvm 生成 dump文件 (也可以通过 jmap 命令行生成)
 *  2. 再通过下载好的mat / jprofile 去打开 dump文件 (我使用的是eclipse 的 mat)
 *  3. 打开 mat ，再上面一排工具拦中找到 java Basics -> GC Roots
 *  4. 观察当执行到第一步的时候 此时的 main下的Roots对象为 21 个,当执行到第二步的时候 只有 19个
 *      找到 Thread -> java.lang.Thread -> main Thread
 * @author youshang
 * @date 2022/03/30 09:34
 **/
public class GCRootsTest {
    public static void main(String[] args) {
        List<Object> numList = new ArrayList<>();
        Date birth = new Date();

        for (int i = 0; i < 100; i++) {
            numList.add(String.valueOf(i));
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("第一步：数据添加完毕，请操作:");
        new Scanner(System.in).next();
        numList = null;
        birth = null;

        System.out.println("第二步：numList、birth已置空，请操作：");
        new Scanner(System.in).next();

        System.out.println("结束");
    }
}
